#ifndef COMMON_H
#define COMMON_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <libgen.h>
#include <stdint.h>
#include <sys/stat.h>
#include <pthread.h>
#include <errno.h>
#include <fcntl.h>      

//事件枚举结构体
typedef enum {
    mTRANSFER_TYPE_SEND = '1',    //发送事件
    mTRANSFER_TYPE_RECEIVE = '2'  //接收事件
} transfer_type_t;

// 线程参数结构体
typedef struct {
    int msockfd;
    const char *mfilepath;
    const char *msave_dir;
    int mIs_send; // 1表示发送，0表示接收
    struct sockaddr_in maddr; // UDP需要保存对端地址
    socklen_t maddr_len;      // 地址长度
} thread_arg_t;

// 函数声明
int send_all(int sockfd, const void *buf, size_t len, struct sockaddr_in *addr, socklen_t addr_len);
int recv_all(int sockfd, void *buf, size_t len, struct sockaddr_in *addr, socklen_t *addr_len);
int send_file(int sockfd, const char *filepath, struct sockaddr_in *addr, socklen_t addr_len);
int recv_file(int sockfd, const char *save_dir, struct sockaddr_in *addr, socklen_t addr_len);
void* file_transfer_thread(void *arg);

#endif